home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / string / stringArray.c < prev    next >
C/C++ Source or Header  |  1991-10-04  |  3KB  |  101 lines

  1. /* 
  2.  * stringArray.c --
  3.  *
  4.  *    Library functions that create and destroy null-terminated 
  5.  *    arrays of strings.  These routines are compatible with argv, 
  6.  *    host aliases, and other system string arrays.
  7.  *
  8.  * Copyright 1991 Regents of the University of California
  9.  * Permission to use, copy, modify, and distribute this
  10.  * software and its documentation for any purpose and without
  11.  * fee is hereby granted, provided that this copyright
  12.  * notice appears in all copies.  The University of California
  13.  * makes no representations about the suitability of this
  14.  * software for any purpose.  It is provided "as is" without
  15.  * express or implied warranty.
  16.  */
  17.  
  18. #ifndef lint
  19. static char rcsid[] = "$Header: /sprite/src/lib/c/string/RCS/stringArray.c,v 1.1 91/10/03 22:53:53 kupfer Exp $ SPRITE (Berkeley)";
  20. #endif /* not lint */
  21.  
  22. #include <stddef.h>
  23. #include <stdlib.h>
  24. #include <string.h>
  25. #include <spriteString.h>
  26.  
  27.  
  28. /*
  29.  *----------------------------------------------------------------------
  30.  *
  31.  * String_SaveArray --
  32.  *
  33.  *    Save copies of an array of strings.
  34.  *
  35.  * Results:
  36.  *    Returns a pointer to a null-terminated array of string 
  37.  *    pointers.  The array and the strings themselves are new 
  38.  *    storage, a copy of the given string array.
  39.  *
  40.  * Side effects:
  41.  *    None.
  42.  *
  43.  *----------------------------------------------------------------------
  44.  */
  45.  
  46. char **
  47. String_SaveArray(origPtr)
  48.     char **origPtr;        /* string array to copy */
  49. {
  50.     int numStrings;        /* number of strings in the array */
  51.     int string;            /* index into the array */
  52.     char **newPtr;        /* the result */
  53.  
  54.     /* 
  55.      * Count the strings in the array.
  56.      */
  57.     for (numStrings = 0; origPtr[numStrings] != NULL; numStrings++) {
  58.     ;
  59.     }
  60.  
  61.     newPtr = (char **)calloc(numStrings+1, sizeof(char *));
  62.     for (string = 0; string < numStrings; string++) {
  63.     newPtr[string] = strdup(origPtr[string]);
  64.     }
  65.     newPtr[numStrings] = NULL;
  66.  
  67.     return newPtr;
  68. }
  69.  
  70.  
  71. /*
  72.  *----------------------------------------------------------------------
  73.  *
  74.  * String_FreeArray --
  75.  *
  76.  *    Free all the storage for a string array.
  77.  *
  78.  * Results:
  79.  *    Returns a nil pointer so that the caller can easily nil out 
  80.  *    the pointer it passed in.
  81.  *
  82.  * Side effects:
  83.  *    The storage is freed.
  84.  *
  85.  *----------------------------------------------------------------------
  86.  */
  87.  
  88. char **
  89. String_FreeArray(stringsPtr)
  90.     char **stringsPtr;        /* string array to free */
  91. {
  92.     int whichString;        /* index into strings array */
  93.  
  94.     for (whichString = 0; stringsPtr[whichString] != NULL; whichString++) {
  95.     free(stringsPtr[whichString]);
  96.     }
  97.     free(stringsPtr);
  98.  
  99.     return NULL;
  100. }
  101.